FIG. 1 illustrates a traditional data storage model including one or more storage devices, such as hard disks, connected to a single storage controller. The storage controller is responsible for applying data redundancy (e.g., data duplication) and data consistency, as well as orchestrating concurrent data access, to ensure that there are no colliding file or disk operations when storing data to the storage devices. This type of storage controller is either hardware (e.g., a RAID (redundant array of independent disks) controller) or software (e.g., a network file server). As shown in FIG. 1, multiple computing devices access the storage devices through a single storage controller.
The single storage controller model shown in FIG. 1 has potential drawbacks, such as the creation of a bottleneck since all data activities are directed through the single storage controller. As additional computing devices are connected to the storage controller, more bandwidth is generally required. Further, as more storage devices are connected to the storage controller, additional processing power is generally required to calculate the data redundancy and perform other functions. The single storage controller model also represents a single point of failure. Even with multiple redundant storage devices, data loss due to failure of the storage controller is not uncommon. This problem is partially mitigated by a dual or clustered controller. However, since storage controllers are generally complex and expensive, the scalability of such an approach is limited.